#pragma once

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

#include <GL/glew.h>

class Shader
{
public:
	// The program ID
	GLuint Program;
	// Constructor reads and builds the shader
	Shader(const GLchar* vertexPath, const GLchar* fragmentPath, const GLchar* geometryPath = nullptr);
	// Use the program
	void Use();
	// utility uniform functions
	void setBool (const std::string& name, bool value) const;
	void setInt (const std::string& name, int value) const;
	void setFloat (const std::string& name, float value) const;
	void setFloat4 (const std::string& name, float x, float y, float z, float w);
};

#include "shaderwrapper.cpp"
